﻿using Lt.Engine.Types;

using RayDen.Library.Components.Color;
using RayDen.Library.Components.Surface;
using RayDen.Library.Core.Primitives;

namespace Lt.Engine.Sampling
{
    public interface IBsdf
    {
        void Setup(RayIntersection isect);
        IRadianceEvaluation Sample(ref Vector wo, ref IRadianceEvaluation radiance, float u0, float u1, float u2, out BsdfSample result, BrdfType flags = BrdfType.All);

        IRadianceEvaluation Evaluate(
            LtScene aScene,
            ref Vector aWorldDirGen,
            float oCosThetaGen,
            out float oDirectPdfW,
            out float oReversePdfW);

        float Pdf(
            LtScene aScene,
            ref Vector aWorldDirGen,
            bool aEvalRevPdf = false);
    }
}